import asyncio
import threading
import time


# 定义一个协程函数，就像是一个可以暂停和恢复的小任务
async def my_coroutine(name):
    print(f"协程 {name} 开始干活啦")
    # 暂停 2 秒钟，模拟做一些耗时的事情
    await asyncio.sleep(10)
    print(f"协程 {name} 干完活啦")


# 定义线程要做的事情
def thread_work():
    # 为这个线程创建一个专属的事件循环
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)

    # 准备一些协程任务
    tasks = [my_coroutine(f"协程 {i}") for i in range(3)]
    # 让这些协程任务一起跑起来，直到都完成
    loop.run_until_complete(asyncio.gather(*tasks))


def main():
    # thread_work()
    # 创建两个线程
    threads = [threading.Thread(target=thread_work) for _ in range(2)]

    # 让这两个线程开始工作
    for thread in threads:
        thread.start()

    # 等待这两个线程都完成工作
    for thread in threads:
        thread.join()


if __name__ == '__main__':
    start = time.time()
    main()
    edd = time.time()
    print(edd-start) # 多线+协程 => 10.015551567077637
